#ifndef PAGEONE_H
#define PAGEONE_H

#include <QWidget>
#include <QMessageBox>           // 消息提示框
#include <QMqttClient>           // MQTT客户端
#include <QJsonDocument>         // JSON文档
#include <QJsonObject>           // JSON对象
#include <QPushButton>           // 按钮
namespace Ui {
class Pageone;
}

class Pageone : public QWidget
{
    Q_OBJECT

public:
    explicit Pageone(QWidget *parent = nullptr);
    ~Pageone();

    // MQTT相关方法
    void setMqttClient(QMqttClient *client);
    void setTopicPrefix(const QString &topicPrefix);  // 设置主题前缀
    void subscribeTopics();  // 订阅主题
    void sendFeedingStatus();  // 发送投喂状态
    void sendAllSettings();  // 🆕 统一发送所有数据（温度+湿度+食物+阈值+状态）
signals:
    // 新增：温度更新信号，参数为当前温度值
    void temperatureChanged(double temp);
    void tempThresholdChanged(int maxTemp, int minTemp);
    void humidityChanged(double humid);
    // 发送湿度阈值（最高+最低）
    void humidThresholdChanged(int maxHumid, int minHumid);

private slots:
    void on_settingBtn_3_clicked();
    void on_alarmBtn_3_clicked();
    void on_pushButton_2_clicked();
    void on_pushButton_clicked();

    // MQTT相关槽函数
    void onMqttMessageReceived(const QByteArray &message, const QMqttTopicName &topic);

    void on_cameraBtn_3_clicked();

private:
    Ui::Pageone *ui;
    int tempThreshold;    // 温度阈值
    int tempMinThreshold; // 新增：温度最低阈值
    double currentTemp;   // 当前温度
    bool isSwitch;      // 状态
    void checkTempSwitch(); // 检查温度并控制开关的函数
    int humidThreshold;    // 湿度阈值
    int humidMinThreshold;    // 新增：湿度最小阈值
    double currentHumid;   // 当前湿度
    bool isHumidSwitch;  // 状态
    void checkHumidSwitch(); // 检查湿度并控制开关的函数
    int currentFoodAmount;    // 当前食物数量
    bool isFoodDispensing;    // 是否正在投喂（减少食物）
    QString deviceFd;     // 🆕 设备fd值（从MQTT消息中接收）

    // MQTT相关成员变量
    QMqttClient *m_mqttClient = nullptr;        // MQTT客户端指针
    QString m_deviceId = "pageone_device";       // 设备ID
    QString m_topicPrefix = "qtmqtt/topic1";   // 主题前缀
    void handleUnifiedData(const QString &message); // 处理统一主题数据
    void handleSensorData(const QString &message); // 处理传感器数据
    void handleTempData(const QString &message);    // 处理温度数据
    void handleHumidData(const QString &message);   // 处理湿度数据
    void handleFoodData(const QString &message);    // 处理食物数据

};

#endif // PAGEONE_H
